﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Senac.Escola.Projeto.Models;
using Senac.Escola.Projeto.Models.Context;
using Senac.ProjetoIntegrador.EducacaoWeb.Models;

namespace Senac.ProjetoIntegrador.EducacaoWeb.Controllers
{
    public class UsuarioController : Controller
    {
        private Context db = new Context();

        public ActionResult Index()
        {
            return View("Login");
        }

        [HttpGet]
        public ActionResult Login()
        {
            if (db.TipoUsuario.ToList().Count == 0)
            {
                //TIPO USUARIO
                TipoUsuario NewTipoUsuario01 = new TipoUsuario
                {
                    Nome = "PROFESSOR"
                };

                db.TipoUsuario.Add(NewTipoUsuario01);
                db.SaveChanges();

                TipoUsuario NewTipoUsuario02 = new TipoUsuario
                {
                    Nome = "ALUNO"
                };

                db.TipoUsuario.Add(NewTipoUsuario02);
                db.SaveChanges();

                TipoUsuario NewTipoUsuario013 = new TipoUsuario
                {
                    Nome = "ADMINISTRADOR"
                };

                db.TipoUsuario.Add(NewTipoUsuario013);
                db.SaveChanges();
                
                //ADM
                Usuario newUsuario = new Usuario 
                {
                    Login = "ADMIN",
                    Senha = "admin",
                    TipoUsuario = db.TipoUsuario.Where(x => x.TipoUsuarioID.Equals(3)).First<TipoUsuario>()
                };

                db.Usuario.Add(newUsuario);
                db.SaveChanges();

                //PROFESSOR

                Professor NewProfessor = new Professor
                {
                    Nome = "Paula Dezena",
                    Disciplina = "Inglês Intermediário",
                    Usuario = new Usuario
                    {
                        Login = "PROFESSOR",
                        Senha = "admin",
                        TipoUsuario = db.TipoUsuario.Where(x => x.Nome.Equals("PROFESSOR")).First<TipoUsuario>(),
                    }
                };

                db.Professor.Add(NewProfessor);
                db.SaveChanges();

                //CATEGORIA

                Categoria NewCategoria = new Categoria
                {
                    Descricao = "Primeiro Semestre - Conceitos básicos",
                    Nome = "Sala 01",
                    Professor = db.Professor.Where(x => x.Nome.Equals("Paula Dezena")).First<Professor>()
                };

                db.Categoria.Add(NewCategoria);
                db.SaveChanges();

                //ALUNO

                Aluno NewAluno = new Aluno
                {
                    Categoria = db.Categoria.Where(x => x.Nome.Equals("Sala 01")).First(),
                    Nivel = "Intermediário",
                    Nome = "Gabriel Lima",
                    Usuario = new Usuario
                    {
                        Login = "ALUNO",
                        Senha = "admin",
                        TipoUsuario = db.TipoUsuario.Where(x => x.Nome.Equals("ALUNO")).First<TipoUsuario>(),
                    }
                };

                db.Aluno.Add(NewAluno);
                db.SaveChanges();
            }

            if (db.Atividade.ToList().Count == 0)
            {
                //ATIVIDADE

                IList<Resposta> ListRespostas01 = new List<Resposta>();

                Resposta Resposta01 = new Resposta { IsResposta = true, Descricao = "Yellow" };
                Resposta Resposta02 = new Resposta { IsResposta = false, Descricao = "Blue" };
                Resposta Resposta03 = new Resposta { IsResposta = false, Descricao = "Red" };
                Resposta Resposta04 = new Resposta { IsResposta = false, Descricao = "Pink" };
                Resposta Resposta05 = new Resposta { IsResposta = false, Descricao = "Black" };

                ListRespostas01.Add(Resposta01);
                ListRespostas01.Add(Resposta02);
                ListRespostas01.Add(Resposta03);
                ListRespostas01.Add(Resposta04);
                ListRespostas01.Add(Resposta05);

                IList<Resposta> ListRespostas02 = new List<Resposta>();

                Resposta Resposta10 = new Resposta { IsResposta = true, Descricao = "Blue" };
                Resposta Resposta11 = new Resposta { IsResposta = false, Descricao = "Orange" };
                Resposta Resposta12 = new Resposta { IsResposta = false, Descricao = "Red" };
                Resposta Resposta13 = new Resposta { IsResposta = false, Descricao = "Pink" };
                Resposta Resposta14 = new Resposta { IsResposta = false, Descricao = "Black" };

                ListRespostas02.Add(Resposta10);
                ListRespostas02.Add(Resposta11);
                ListRespostas02.Add(Resposta12);
                ListRespostas02.Add(Resposta13);
                ListRespostas02.Add(Resposta14);

                Pergunta Pergunta01 = new Pergunta
                {
                    Ativo = true,
                    DescricaoPergunta = "Como se diz Amarelo em Inglês ?",
                    NumeroPergunta = 1,
                    Resposta = ListRespostas01
                };

                Pergunta Pergunta02 = new Pergunta
                {
                    Ativo = true,
                    DescricaoPergunta = "Como se diz Azul em Inglês ?",
                    NumeroPergunta = 2,
                    Resposta = ListRespostas02
                };

                IList<Pergunta> ListPergunta = new List<Pergunta>();
                ListPergunta.Add(Pergunta01);
                ListPergunta.Add(Pergunta02);

                Atividade NewAtividade = new Atividade
                {
                    Ativo = true,
                    Categoria = db.Categoria.Where(x => x.Nome.Equals("Sala 01")).First(),
                    Nome = "CORES - Aprendendo as cores em Inglês",
                    QuantidadePerguntas = 2,
                    Pergunta = ListPergunta
                };

                db.Atividade.Add(NewAtividade);
                db.SaveChanges();
            }

            return View();
        }

        [HttpPost]
        public ActionResult Login(Usuario Usuario)
        {
            if (string.IsNullOrEmpty(Usuario.Login) || string.IsNullOrEmpty(Usuario.Senha))
            {
                ViewBag.MensagemLogin = "Por favor, confira os dados de login.";
                return View();
            }

            Usuario _usuario = db.Usuario.SingleOrDefault(p => p.Login.ToLower() == Usuario.Login.ToLower());

            if (_usuario != null && (_usuario.Senha == Usuario.Senha))
            {
                TipoUsuario TipoUsuario = db.TipoUsuario.Find(_usuario.TipoUsuarioID);

                Session[EducacaoWebConstants.SESSION_USUARIO_ATUAL] = _usuario;
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ViewBag.MensagemLogin = "Por favor, confira os dados de login.";
                return View();
            }
        }

        public ActionResult Edit(int id)
        {
            return View();
        }

        public ActionResult Create()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        public ActionResult Delete(int id)
        {
            return View();
        }

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
               return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        public ActionResult LogOff()
        {
            Session[EducacaoWebConstants.SESSION_USUARIO_ATUAL] = new Usuario();
            return View("Login");
        }
    }
}
